A typical contemporary computer program needs to undergo testing, monitoring, debugging and/or troubleshooting, including when the program is operating remotely. In order to do this successfully, a significant amount of information often needs to be exchanged with a server doing the testing, for example, and the testing server and device being tested need to participate in an organized way.
For example, consider a test that is run on a server that needs to simulate input to a program via certain input devices. Without well-ordered and controlled participation, testing and troubleshooting may be difficult given the various types of input devices, each of which may have its own nuances.